home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 744 / fo2 / sources_fo2 / memtodisk.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  2KB  |  105 lines

  1. #include "defs.h"
  2.  
  3. Prototype MemToDisk();
  4.  
  5.  
  6. MemToDisk()
  7. {
  8. WORD n,bitmap;
  9. LONG offset,*adrB,*empty,ddrive,A;
  10. BYTE *BuffT,write,length,val;
  11. WORD c,Form;
  12. struct DiskList *dlist=0;
  13. struct RootNode *RN;
  14. struct RootB *adr;
  15.  
  16.     if (sourceDrive==destDrive) 
  17.     {
  18.         putIText("Now insert dest disk                ");
  19.         if (WaitChangeDisk(destDrive,-1)==2) return(2);
  20.         putIText("Thanck you                          ");
  21.     }
  22.  
  23.     if (isInserted(destDrive)) 
  24.     {
  25.         putIText("YOU MUST insert DESTINATION disk ... ");
  26.         while (isInserted(destDrive)) Delay(10);
  27.     }
  28.     if (isProtected(destDrive)) 
  29.     {
  30.         while (isProtected(destDrive))
  31.         {
  32.             putIText("UnProtect DESTINATION disk ...      ");
  33.             while (!isInserted(destDrive)) Delay(10);
  34.             while (isInserted(destDrive)) Delay(10);
  35.         }
  36.     }
  37.     
  38.     putIText("Writing result to destination disk  ");
  39.  
  40.     offset=2*512L;    /* Le boot Block est déja dans le Buffer de Track */
  41.     BuffT=BT;
  42.     /*    On met à jour la date de dernière modif de la disquette */
  43.     dlist=whereB(880);
  44.     if (dlist==0) NotSet(880,8);
  45.     adr=dlist->dl_AdrB;
  46.     RN=(struct RootNode *)(DOSBase->dl_Root);
  47.     adr->Mday=RN->rn_Time.ds_Days;
  48.     adr->Mmin=RN->rn_Time.ds_Minute;
  49.     adr->Mtick=RN->rn_Time.ds_Tick;
  50.  
  51.     length=adr->DiskName[0];
  52.     adr->DiskName[0]=length+1;
  53.     if (length<30) adr->DiskName[length+1]='.';
  54.     else {adr->DiskName[length]='.'; adr->DiskName[0]=length;}
  55.  
  56.     bitmap=VarAdr->BitMap;
  57.     empty=VarAdr->Empty;
  58.     ddrive=destDrive;
  59.     A=('F'<<24|'B'<<16|'J'<<8|'.');
  60.  
  61.     for (n=0;n<128;n++)
  62.     {
  63.         empty[n]=A;
  64.     }
  65.  
  66.     /*printf("buffer a l' adresse %p\n",empty);*/
  67.     putchar(13);
  68.  
  69.     Form=FORMAT;
  70.     /*printf("Form : %d, VarAdr->Format: %ld\n",Form,VarAdr->Format);*/
  71.     write=Form;
  72.     for (n=2;n<1761;n++)
  73.     {
  74.         val=HandleIDCMP2(FOWin);
  75.         if (val)
  76.         {
  77.             if (val==1) exit(0);
  78.             if (val==2) return(2);
  79.         }
  80.         if (offset==11*512) 
  81.         {
  82.             /*printf("(n-12): %d\n",(n-11));    */
  83.             if (write)    CMDonD(ddrive,TD_FORMAT,0,11*512L,BuffT,(n-11)*512L);
  84.             offset=0L;
  85.             if (!Form) write=0;
  86.         }
  87.         if (( n % 22 )==0) printCYL(n/22);
  88.         if (n==881) {adrB=BBM; write=1;}
  89.         else 
  90.         {
  91.             dlist=whereB(n);
  92.             if (dlist==0) adrB=empty;
  93.             else 
  94.             {
  95.                 adrB=dlist->dl_AdrB;
  96.                 if (FFS==0 || dlist->dl_Type!=8) BuildCheckSum(adrB);
  97.                 write=1;
  98.             }
  99.         }    
  100.         CopyMemQuick(adrB,BuffT+offset,512L);
  101.         offset+=512L;
  102.     }
  103.     return(0);
  104.